<?php



class PerguntaInscricao
{
	private $idPergunta;
	private $idUsuario;
	private $idCurso;
	private $pergunta;
	private $tipo;
	
	
    /**
     * Returns $idCurso.
     * @see PerguntaInscricao::$idCurso
     */
    public function getIdCurso()
    {
        return $this->idCurso;
    }
    
    /**
     * Sets $idCurso.
     * @param object $idCurso
     * @see PerguntaInscricao::$idCurso
     */
    public function setIdCurso($idCurso)
    {
        $this->idCurso = $idCurso;
    }
    
    /**
     * Returns $idPergunta.
     * @see PerguntaInscricao::$idPergunta
     */
    public function getIdPergunta()
    {
        return $this->idPergunta;
    }
    
    /**
     * Sets $idPergunta.
     * @param object $idPergunta
     * @see PerguntaInscricao::$idPergunta
     */
    public function setIdPergunta($idPergunta)
    {
        $this->idPergunta = $idPergunta;
    }
    
    /**
     * Returns $idUsuario.
     * @see PerguntaInscricao::$idUsuario
     */
    public function getIdUsuario()
    {
        return $this->idUsuario;
    }
    
    /**
     * Sets $idUsuario.
     * @param object $idUsuario
     * @see PerguntaInscricao::$idUsuario
     */
    public function setIdUsuario($idUsuario)
    {
        $this->idUsuario = $idUsuario;
    }
    
    /**
     * Returns $pergunta.
     * @see PerguntaInscricao::$pergunta
     */
    public function getPergunta()
    {
        return $this->pergunta;
    }
    
    /**
     * Sets $pergunta.
     * @param object $pergunta
     * @see PerguntaInscricao::$pergunta
     */
    public function setPergunta($pergunta)
    {
        $this->pergunta = $pergunta;
    }
    
    /**
     * Returns $tipo.
     * @see PerguntaInscricao::$tipo
     */
    public function getTipo()
    {
        return $this->tipo;
    }
    
    /**
     * Sets $tipo.
     * @param object $tipo
     * @see PerguntaInscricao::$tipo
     */
    public function setTipo($tipo)
    {
        $this->tipo = $tipo;
    }
	
	/**
	 * Seleciona as perguntas inscricao padrao, fazendo paginacao, se necessario.
	 * @return array
	 */
	public static function getPerguntasInscricao($tipoInsercao, $ordena, $ordem, $paginaAtual, $idCurso = null, $idProfessor = null) {
		switch ($tipoInsercao) {
			case 'padrao':
				$strQuerySelectPergunta 	=	"SELECT * FROM perguntasInscricaoPadrao";
				break;
				
			case 'curso':
				if (!is_numeric($idCurso) || $idCurso == null) {
					return false;
				}
				$strQuerySelectPergunta 	=	"SELECT * FROM perguntasInscricao WHERE idCurso = " . $idCurso;
				break;
			case 'professor':
				if (!is_numeric($idProfessor) || $idProfessor == null) {
					return false;
				}
				
				$strQuerySelectPergunta 	=	"SELECT * FROM perguntasInscricao WHERE idUsuario = " . $idProfessor . " AND idPerguntaPadrao IS NULL";
				
				if (is_numeric($idCurso) && $idCurso != null) {
					$strQuerySelectPergunta	.=	" AND idCurso != " . $idCurso;
				}
				$strQuerySelectPergunta	.=	" GROUP BY pergunta";
				break;
			default:
				return false;
		}
		
		
		if ($ordem != 'asc' && $ordem != 'desc') {
			$ordem 	=	'asc';
		}
		
		switch ($ordena) {
			case 'ordenapergunta':
				$strQuerySelectPergunta 	.=	" ORDER BY pergunta " . $ordem;
				break;
				
			case 'ordenatipo':
				$strQuerySelectPergunta 	.=	" ORDER BY tipo " . $ordem;
				break;
				
			default:
				$strQuerySelectPergunta 	.=	" ORDER BY pergunta " . $ordem;
				break;
		}
		
		$strQueryQtd	=	"SELECT COUNT(*) as qtdPerguntas FROM (" . $strQuerySelectPergunta . ") as selecao;";
		
		$qtdPerguntas	=	BancoDados::query($strQueryQtd);
		$qtdPerguntas 	=	$qtdPerguntas[0]['qtdPerguntas'];
		
		if ($paginaAtual != null) {
			$qtdPaginas		=	ceil($qtdPerguntas / __QTD_ITENS_LISTA__);
			if ($qtdPaginas == 0) {
				$qtdPaginas 	=	1;
			}
			
			if ($paginaAtual == 0 || $paginaAtual > $qtdPaginas) {
				redireciona(array('404'));
				exit;
			}
			
			$limit		=	__QTD_ITENS_LISTA__;
			$offset		=	($paginaAtual - 1) * __QTD_ITENS_LISTA__;
			$strQuerySelectPergunta 	.=	" LIMIT " . $limit . " OFFSET " . $offset . ";";
		}
		else {
			$qtdPaginas 	=	null;
			$strQuerySelectPergunta		.=	";";
		}
		
		$listaPerguntas	=	BancoDados::query($strQuerySelectPergunta);
		
		if (!is_array($listaPerguntas)) {
			redireciona(array('administracao'));
			exit;
		}
		else {
			if ($tipoInsercao == 'padrao') {
				foreach($listaPerguntas as $chave => $pergunta) {
					$strQuery	=	"SELECT COUNT(idPerguntaPadrao) as qtdCursos FROM perguntasInscricao WHERE idPerguntaPadrao = " . $pergunta['idPergunta'] . ";";
					$resultado	=	BancoDados::query($strQuery);
					
					$listaPerguntas[$chave]['qtdCursos']	=	$resultado[0]['qtdCursos'];
				}
			}
			return	array('listaPerguntas' => $listaPerguntas, 'qtdPerguntas' => $qtdPerguntas, 'qtdPaginas' => $qtdPaginas);
		}
	}
	
	/**
	 * Insere uma nova pergunta de inscricao padrao no banco
	 * @return 
	 * @param object $pergunta
	 * @param object $tipo
	 * @param object $alternativas[optional]
	 */
	public static function inserePerguntaInscricao($tipoInsercao, $pergunta, $tipo, $alternativas = null, $idCurso = null, $idUsuario = null) {
		
		switch ($tipoInsercao) {
			case 'padrao':
				$strQueryLock				=	"LOCK TABLES perguntasInscricaoPadrao WRITE;";
				$strQueryInsertPergunta		=	"INSERT INTO perguntasInscricaoPadrao VALUES(default, '" . $pergunta . "', '" . $tipo . "');";
				$strQuerySelectId			=	"SELECT idPergunta FROM perguntasInscricaoPadrao WHERE pergunta = '" . $pergunta . "' ORDER BY idPergunta DESC LIMIT 1;";
				break;
				
			case 'curso':
				$strQueryLock				=	"LOCK TABLES perguntasInscricao WRITE;";
				$strQueryInsertPergunta		=	"INSERT INTO perguntasInscricao VALUES(default, ". $idUsuario . ", " . $idCurso . ", NULL, '" . $pergunta . "', '" . $tipo . "');";
				$strQuerySelectId			=	"SELECT idPergunta FROM perguntasInscricao WHERE pergunta = '" . $pergunta . "' ORDER BY idPergunta DESC LIMIT 1;";
				break;
			default:
				return false;
		}
		
		if (!$conexao	=	BancoDados::conectaBancoDados()){
			//TODO Mensagens de erro!
			return false;
		}
		else {
			if(!BancoDados::query($strQueryLock, $conexao)){
				//TODO Mensagens de erro!
				return false;
			}
			else {
				if (!BancoDados::query($strQueryInsertPergunta, $conexao)) {
					//TODO Mensagens de erro!
					return false;
				} 
				if (!$result = BancoDados::query($strQuerySelectId, $conexao)){
					//TODO Mensagens de erro!
					return false;
				}
				$strQuery	=	"UNLOCK TABLES;";
				BancoDados::query($strQuery, $conexao);
				BancoDados::desconectaBancoDados($conexao);
				
				while ($resultado = mysql_fetch_array($result)) {
					$idPergunta =	$resultado['idPergunta'];
				}
				
				if ($tipo == 'discursiva' || $tipo == 'simnao') {
					return	$idPergunta;
				}
				else {
					$alternativasPreenchidas	=	array();
					
					foreach ($alternativas as $alternativa) {
						if ($alternativa != '') {
							array_push($alternativasPreenchidas, $alternativa);
						}
					}
					
					foreach ($alternativasPreenchidas as $alternativaPreenchida) {
						switch ($tipoInsercao) {
							case 'padrao':
								$strQueryInsertAlternativa	=	"INSERT INTO perguntasInscricaoPadraoAlternativas VALUES(default, " . $idPergunta . ", '" . $alternativaPreenchida . "');";
								break;
							case 'curso':
								$strQueryInsertAlternativa	=	"INSERT INTO perguntasInscricaoAlternativas VALUES(default, " . $idPergunta . ", '" . $alternativaPreenchida . "');";
								break;
						}
						
						if (!BancoDados::query($strQueryInsertAlternativa)) {
							PerguntaInscricao::removerPerguntaInscricao('padrao', $idPergunta);
							return false;
						}
					}
					return	$idPergunta;
				}
			}
		}
	}
	
	/**
	 * Remove uma pergunta de inscricao padrao do banco
	 * @return 
	 * @param object $idPergunta
	 */
	public static function removerPerguntaInscricao($tipoRemocao, $idPergunta) {
		switch($tipoRemocao) {
			case 'padrao':
				$strQueryDeleteAlternativas	=	"DELETE FROM perguntasInscricaoPadraoAlternativas WHERE idPergunta = " . $idPergunta . ";";
				$strQueryDeletePergunta		=	"DELETE FROM perguntasInscricaoPadrao WHERE idPergunta = " . $idPergunta . ";";
				break;
			case 'curso':
				$strQueryDeleteAlternativas	=	"DELETE FROM perguntasInscricaoAlternativas WHERE idPergunta = " . $idPergunta . ";";
				$strQueryDeletePergunta		=	"DELETE FROM perguntasInscricao WHERE idPergunta = " . $idPergunta . ";";
				break;
			default:
				return false;
		}
		
		if (!BancoDados::query($strQueryDeleteAlternativas)) return false;
		if ($tipoRemocao == 'padrao') {
			$strQuery	=	"UPDATE perguntasInscricao SET idPerguntaPadrao = NULL WHERE idPergunta = " . $idPergunta . ";";
			if (!BancoDados::query($strQuery)) return false;
		}
		if (!BancoDados::query($strQueryDeletePergunta)) return false;
		
		return true;
	}
	
	public static function copiaPerguntaInscricao($tipoCopia, $idPerguntaInscricao, $idCurso, $idUsuario) {
		$alternativas	=	null;
		
		switch ($tipoCopia) {
			case 'padrao':
				$strQuerySelectPergunta 		=	"SELECT * FROM perguntasInscricaoPadrao WHERE idPergunta = " . $idPerguntaInscricao . ";";
				$strQuerySelectAlternativas		=	"SELECT * FROM perguntasInscricaoPadraoAlternativas WHERE idPergunta = " . $idPerguntaInscricao . ";";
				break;
				
			case 'professor':
				$strQuerySelectPergunta 		=	"SELECT * FROM perguntasInscricao WHERE idPergunta = " . $idPerguntaInscricao . ";";
				$strQuerySelectAlternativas		=	"SELECT * FROM perguntasInscricaoAlternativas WHERE idPergunta = " . $idPerguntaInscricao . ";";
				break;
		}
		
		if (!$resultado 	=	BancoDados::query($strQuerySelectPergunta)) return false;
		
		$dadosPergunta	=	$resultado[0];
		
		$textoPergunta	=	$dadosPergunta['pergunta'];
		$tipoPergunta	=	$dadosPergunta['tipo'];
		
		if ($tipoPergunta == 'selecaounica' || $tipoPergunta == 'selecaomultipla') {
			if (!$resultado =	BancoDados::query($strQuerySelectAlternativas)) return false;
			
			$alternativas	=	$resultado;
		}
		else {
			$alternativas	=	null;
		}
		
		if (!$idPerguntaInserida 	=	PerguntaInscricao::inserePerguntaInscricao('curso', $textoPergunta, $tipoPergunta, $alternativas, $idCurso, $idUsuario))
			return false;
			
		if ($tipoCopia == 'padrao')	{
			$strQueryUpdate	=	"UPDATE perguntasInscricao SET idPerguntaPadrao = " . $idPerguntaInscricao . " WHERE idPergunta = " . $idPerguntaInserida . ";";
			if (!BancoDados::query($strQueryUpdate))
				return false;
		}
		return true;
	}
}
?>